package ru.compft.web.validator;

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.ValidationUtils;
import org.springframework.validation.Validator;
import ru.compft.common.utils.GlobalErrors;
import ru.compft.web.beans.UserBean;

import javax.annotation.Resource;

/**
 * User: ASUS
 * Date: 09.08.12
 * Time: 21:00
 * Валидатор для пользователей
 */
@Component("userValidator")
public class UserValidator implements Validator {

    public static final String LOGIN = "login";
    private static final int MINIMUM_LOGIN_LENGTH = 6;

    @Resource(name = "messageSource")
    private MessageSource messageSource;

    @Override
    public boolean supports(Class<?> clazz) {
        return UserBean.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        // Локализованное название поля login
        final String localizedLogin = messageSource.getMessage(LOGIN, null, LocaleContextHolder.getLocale());

        ValidationUtils.rejectIfEmptyOrWhitespace(errors, LOGIN, GlobalErrors.FIELD_REQUIRED, new String[]{localizedLogin});

        UserBean formBean = (UserBean) target;
        // длинна логина меньше чем допустимое количество символов
        final String login = formBean.getLogin();
        if (login != null
                && login.trim().length() < MINIMUM_LOGIN_LENGTH) {
            errors.rejectValue(LOGIN, GlobalErrors.FIELD_MIN_LENGTH,
                    new Object[]{localizedLogin, Integer.toString(MINIMUM_LOGIN_LENGTH)},
                    null);
        }
    }
}
